package com.zykj.thread.concurrent.pool;

import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
 * @author zhoulj(周利军) [1217102780@qq.com]
 * @Module ID:   <(模块)类编号，可以引用系统设计中的类编号>
 * @Comments: <对此类的描述，可以引用系统设计中的描述>
 * @JDK version used:      <JDK1.8> 53
 * @since 2019/1/15-10:53
 */
public class ThreadPoolDemo {

    public static void main(String[] args) {

//         固定数量的线程池( 每次拿 固定数量的线程 去执行 )
//        ExecutorService pool = Executors.newFixedThreadPool(3);

        //  缓存线程池（自动增加线程数量  ）
//        ExecutorService pool = Executors.newCachedThreadPool();

        //TODO 单个线程（使用场景： 可实现线程死了 自动创建新的线程出来:自动重启）
        ExecutorService pool = Executors.newSingleThreadExecutor();

        for (int i = 0; i < 10; i++) {
            final int taski = i ;
            pool.execute(new Runnable() {
                public void run() {
                    for (int j = 0; j < 5; j++) {
                        System.out.println(Thread.currentThread().getName()+", for j    ="+j+", for task i=="+taski);
                    }

                }
            });

        }

        // 线程池使用完， 关闭线程
        pool.shutdown();



        //线程池  时钟(实现了 开始10s后 彭..  再每隔1s 彭)
        Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {
            public void run() {
                System.out.println("彭...");
            }
        }, 10, 1, TimeUnit.SECONDS);
    }
}
